//
// Ishtar C++ Utility Library
//
// Task Facility - Pooled Thread Implementation
//

#include <Ishtar/Pch.h>

#include <Ishtar/Task/PooledThread.h>
#include <Ishtar/Task/ThreadPoolImpl.h>


namespace Ishtar
{

namespace Task
{

///////////////////////////////////////////////////////////////////////////////
//
// Pooled Thread
//

PooledThread::PooledThread( ThreadPoolImpl* threadPool, Uint index )
    : m_threadPool( threadPool )
    , m_index( index )
    , m_stopped( false )
{
    m_name = Sprintf( "%s %u", threadPool->GetName(), index );
}


//void PooledThread::Wake( const WorkImplPtr& work )
//{
//    ISHTAR_LOCK_MUTEX( m_mutex );
//    
//    ISHTAR_ASSERT( !m_runningWork );
//    
//    m_runningWork = work;
//    m_waken.NotifyOne();
//}
//
//
//void PooledThread::Stop()
//{
//    ISHTAR_ASSERT( !m_stopped );
//
//    m_stopped = true;
//    m_waken.NotifyOne();
//}
//
//
//Int PooledThread::Execute()
//{
//    while ( !m_stopped )
//    {
//        ISHTAR_GET_MUTEX_LOCK( lock, m_mutex );
//        
//        if ( m_runningWork )
//        {
//            WorkImplPtr work = m_runningWork;
//            
//            const Bool toRun = work->PrepareRun();
//
//            if ( toRun )
//            {
//                work->Run();
//            }
//            
//            m_runningWork.reset();
//            
//            lock.Unlock();
//            
//            m_threadPool->AddReadyThread( this );
//            
//            if ( toRun )
//            {
//                work->CompleteRun();
//            }
//        }
//        else
//        {
//            m_waken.Wait( lock );
//        }
//    }
//        
//    return EXECUTE_EXIT;
//}


///////////////////////////////////////////////////////////////////////////////

} // namespace Task

} // namespace Ishtar
